//
//  YBPlayCtrlView.m
//  WuyouTang
//
//  Created by YB007 on 2019/12/4.
//  Copyright © 2019 cat. All rights reserved.
//

#import "YBPlayCtrlView.h"

#import "YBLiveChatView.h"
#import "YBUserListView.h"
#import "YBUserEnterAnimation.h"
#import "YBGiftPage.h"
#import "expensiveGiftV.h"
#import "continueGift.h"
#import "YBShareView.h"
#import "YBOnSaleView.h"
#import "YBGoodsInfoVC.h"
#import "YBGoodsBriefView.h"
#import "RKShowPaintedView.h"
#import "SDCycleScrollView.h"
#import "YBDayTaskView.h"
#import "turntableView.h"
#import "guardShowView.h"
#import "shouhuView.h"
#import "YBTxLinkMicView.h"
#import "YBAnchorPKView.h"
#import "OutsideGoodsDetailVC.h"
#import "CommodityDetailVC.h"
#import "YBAnchorLinkInfo.h"
@interface YBPlayCtrlView()<UIGestureRecognizerDelegate,haohuadelegate,SDCycleScrollViewDelegate,turntableViewDelegate,shouhuViewDelegate,guardShowDelegate>
{
    NSString *_liveUid;                         //主播uid
    NSString *_liveStream;                      //主播留地址
    
    expensiveGiftV *haohualiwuV;                //豪华礼物
    continueGift *continueGifts;                //连送礼物
    UIView *liansongliwubottomview;
    UIImageView *starImage;
    CGFloat starX;
    CGFloat starY;
    guardShowView *gShowView;
    shouhuView *guardView;
    int _linkMicAskLast;
    NSTimer *_linkMicAskTimer;                  //连麦请求中倒计时
    YBAlertView *_disconnectAlert;
}
//@property(nonatomic,strong)UIScrollView *horScrollView;         //水平滑动Scroll
@property(nonatomic,strong)UIView *showUIView;

@property(nonatomic,strong)UIView *hostInfoView;                //左上角主播信息
@property(nonatomic,strong)UIButton *hostAvatarBtn;             //主播头像
@property(nonatomic,strong)UILabel *hostNameL;                  //主播昵称
@property(nonatomic,strong)UILabel *hostIDL;                    //主播id
@property(nonatomic,strong)UIButton *followBtn;                 //关注按钮

@property(nonatomic,strong)UIButton *hostVotesBtn;              //主播映票
@property(nonatomic,strong)UIButton *hostGuardBtn;              //守护
@property(nonatomic,strong)NSArray *roomGameArray;
@property(nonatomic,strong)SDCycleScrollView *roomGameCycle;    //幸运转盘+每日任务
@property(nonatomic,strong)YBPageControl *roomGamePage;
@property(nonatomic,strong)YBDayTaskView *dayTaskView;          //每日任务
@property(nonatomic,strong)turntableView *turntableView;        //转盘

@property(nonatomic,strong)YBUserListView *userListView;        //用户列表
@property(nonatomic,strong)YBLiveChatView *liveChatView;        //公屏聊天
@property(nonatomic,strong)YBGoodsBriefView *goodsBriefView;    //当前展示的商品
@property(nonatomic,strong)YBUserEnterAnimation *userAnimation; //进场动画
@property(nonatomic,strong)YBOnSaleView *onsaleView;
@property(nonatomic,strong)RKShowPaintedView *paintedShowRegion;//手绘礼物显示区域


@property(nonatomic,strong)UIButton *closeLiveBtn;              //↓...底部功能键
@property(nonatomic,strong)UIButton *shareBtn;
@property(nonatomic,strong)UIButton *msgBtn;
@property(nonatomic,strong)UILabel *redPoint;
@property(nonatomic,strong)UIButton *giftBtn;
@property(nonatomic,strong)UIButton *cartBtn;

@property(nonatomic,strong)YBTxLinkMicView *linkMicView;        //连麦窗口
@property(nonatomic,strong)YBAnchorPKView *pkView;
@property(nonatomic,strong)YBAnchorLinkInfo *pkTohostInfoV;
@property(nonatomic,strong)UIButton *pkFollowBtn;

@end

@implementation YBPlayCtrlView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        
        [self addSubview:self.avatarEffect];
        [self addSubview:self.horScrollView];
        if (@available(iOS 11.0,*)) {
            _horScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }else {
            [YBBaseAppDelegate sharedAppDelegate].topViewController.automaticallyAdjustsScrollViewInsets = NO;
        }
        [_showUIView addSubview:self.hostInfoView];
        [_showUIView addSubview:self.hostVotesBtn];
        [_showUIView addSubview:self.hostGuardBtn];
        [_showUIView addSubview:self.userListView];
        [_showUIView addSubview:self.liveChatView];
        [_showUIView addSubview:self.goodsBriefView];
        [_showUIView addSubview:self.userAnimation];
        [_showUIView addSubview:self.botBtnFunView];
        [_showUIView addSubview:self.chatTool];
        [_showUIView addSubview:self.linkCtrBtn];
        
        self.roomGameArray = @[@"日任-房间",@"幸运大转盘"];
        if ([lagType isEqual:EN]) {
            self.roomGameArray = @[@"日任-房间_en",@"幸运大转盘_en"];
        }
        [_showUIView addSubview:self.roomGameCycle];
        [_showUIView addSubview:self.roomGamePage];
        if ([PublicObj isUp]) {
            self.roomGameCycle.hidden = self.roomGamePage.hidden = YES;
        }
        [_showUIView addSubview:self.turntableView];
        _turntableView.hidden = YES;
        
        /// 青少年
        int youngSwitch = [YBYoungManager shareInstance].youngSwitch;
        if (youngSwitch == 1) {
            _linkCtrBtn.hidden = YES;
            _roomGameCycle.hidden = YES;
            _roomGamePage.hidden = YES;
            _hostVotesBtn.hidden = YES;
            _hostGuardBtn.hidden = YES;
        }
    }
    return self;
}
- (void)layoutSubviews {
    [super layoutSubviews];
    [_hostInfoView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(_showUIView.mas_left).offset(11);
        make.top.equalTo(_showUIView.mas_top).offset(27+statusbarHeight);
        make.right.equalTo(_followBtn.mas_right).offset(5);
        make.height.mas_equalTo(34);
    }];
    
    [_userListView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(40);
        make.left.equalTo(_hostInfoView.mas_right).offset(5);
        make.centerY.equalTo(_hostInfoView.mas_centerY).offset(-5);
        make.right.equalTo(_showUIView.mas_right).offset(0);
    }];
    
    [_hostVotesBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(_hostInfoView);
        make.top.equalTo(_hostInfoView.mas_bottom).offset(8);
        make.height.mas_equalTo(22);
    }];
    [_hostGuardBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(_hostVotesBtn.mas_right).offset(5);
        make.height.centerY.equalTo(_hostVotesBtn);
    }];
    [_roomGameCycle mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.mas_equalTo(70);
        make.height.mas_equalTo(50);
        make.left.equalTo(_hostVotesBtn);
        make.top.equalTo(_hostVotesBtn.mas_bottom).offset(30);
    }];
    [_roomGamePage mas_makeConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(10);
        if (@available(iOS 14.0,*)) {
            make.width.mas_equalTo(200);
        }else {
            make.width.mas_equalTo(80);
        }
        make.centerX.equalTo(_roomGameCycle);
        make.top.equalTo(_roomGameCycle.mas_bottom).offset(0);
    }];
    
    [_userAnimation mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(_showUIView.mas_left).offset(10);
        make.bottom.equalTo(_liveChatView.mas_top).offset(-20);
        make.width.mas_equalTo(_window_width);
        make.height.mas_equalTo(20);
    }];
    CGFloat blodW = 50;
    if ([PublicObj isBlodText]) {
        blodW = 60;
    }
    [_linkCtrBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(blodW);
        make.bottom.equalTo(_botBtnFunView.mas_top).offset(-10);
        make.right.equalTo(_showUIView.mas_right).offset(-15);
    }];
    [_linkCtrBtn layoutIfNeeded];
    _linkCtrBtn = [PublicObj setUpImgDownText:_linkCtrBtn];
    
    [_hostGuardBtn layoutIfNeeded];
    [_hostGuardBtn setImageEdgeInsets:UIEdgeInsetsMake(0, _hostGuardBtn.titleLabel.size.width, 0, -_hostGuardBtn.titleLabel.size.width)];
    [_hostGuardBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_hostGuardBtn.imageView.size.width-1, 0, _hostGuardBtn.imageView.size.width+1)];
}
- (void)setPlayDic:(NSDictionary *)playDic {
    _playDic = playDic;
    
    _liveUid = minstr([_playDic valueForKey:@"uid"]);
    _liveStream = minstr([_playDic valueForKey:@"stream"]);
    
    if (_userListView) {
        _userListView.liveUid = minstr(_liveUid);
        _userListView.liveStream = minstr(_liveStream);
    }
    //主播信息
    [_avatarEffect sd_setImageWithURL:[NSURL URLWithString:minstr([_playDic valueForKey:@"avatar"])] placeholderImage:[PublicObj getAppIcon]];
    [_hostAvatarBtn sd_setImageWithURL:[NSURL URLWithString:minstr([_playDic valueForKey:@"avatar"])] forState:0 placeholderImage:[PublicObj getAppIcon]];
    _hostNameL.text = minstr([_playDic valueForKey:@"user_nickname"]);
    _hostIDL.text = [NSString stringWithFormat:@"ID:%@",[_playDic valueForKey:@"uid"]];
    
    int isShop = [minstr([playDic valueForKey:@"isshop"]) intValue];
    int youngSwitch = [YBYoungManager shareInstance].youngSwitch;
    if (youngSwitch == 1) {
        // 开启青少年后购物开关置为0
        isShop = 0;
        [_giftBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.height.mas_equalTo(30);
            make.width.mas_equalTo(0);
            make.centerY.equalTo(_botBtnFunView);
            make.right.equalTo(_cartBtn.mas_left).offset(-10);
        }];
    }
    _cartBtn.hidden = !isShop;
    CGFloat btnW = (isShop == 1 )?30:0;
    CGFloat leftSpace = (isShop == 1 )?(-10):0;
    [_cartBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(30);
        make.width.mas_equalTo(btnW);
        make.centerY.equalTo(_botBtnFunView);
        make.right.equalTo(_msgBtn.mas_left).offset(leftSpace);
    }];
    
    [self showGoodsBtnAnimaition];
}
#pragma mark - 点击事件
-(void)clickHostAvatarBtn {
    if (self.playCtrEvent && ![PublicObj checkNull:_liveUid]) {
        self.playCtrEvent(@"控制-信息卡", @{@"id":_liveUid});
    }
}
-(void)clickFollowBtn {
    [MBProgressHUD showMessage:@""];
    YBWeakSelf;
    [WYNetworking postWithUrl:@"User.setAttent" Dic:@{@"touid":_liveUid} Suc:^(int code, id info, NSString *msg) {
        [MBProgressHUD hideHUD];
        [weakSelf updateFollowShow:NO];
        if (weakSelf.playCtrEvent) {
            weakSelf.playCtrEvent(@"控制-关注", @{});
        }
    } Fail:^(id fail) {
        [MBProgressHUD hideHUD];
    }];
}
-(void)updateFollowShow:(BOOL)isShow {
    if (isShow) {
        [_followBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.height.mas_equalTo(24);
            make.centerY.equalTo(_hostAvatarBtn);
            make.left.equalTo(_hostNameL.mas_right).offset(6);
        }];
    }else {
        [_followBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.width.mas_equalTo(0);
            make.height.mas_equalTo(24);
            make.centerY.equalTo(_hostAvatarBtn);
            make.left.equalTo(_hostNameL.mas_right).offset(6);
        }];
    }
}

-(void)clickKeyBtn {
    [_chatTool.chatTF becomeFirstResponder];
    _botBtnFunView.hidden = YES;
    _chatTool.hidden = NO;
}
-(void)clikcCloseLiveBtn {
    if (self.playCtrEvent) {
        self.playCtrEvent(@"控制-关闭", @{});
    }
}
-(void)clikcShareBtn {
    //分享
    NSDictionary *shareDic = @{@"hostName":minstr([_playDic valueForKey:@"user_nickname"]),@"thumb_s":minstr([_playDic valueForKey:@"avatar_thumb"]),@"hostId":minstr([_playDic valueForKey:@"uid"]),@"liveTitle":minstr([_playDic valueForKey:@"title"])};
    [YBShareView showShareWithType:RKShareType_Liveing parameter:shareDic commplete:^(int codeEvent, NSString *nums) {
        
    }];
    
}
-(void)clikcMsgBtn {
    //私信
    if (self.playCtrEvent) {
        self.playCtrEvent(@"控制-私信", @{});
    }
}
-(void)clikcGiftBtn {
    //礼物打赏
    YBWeakSelf;
    /*
    [MBProgressHUD showMessage:@""];
    [WYNetworking postWithUrl:@"Live.getGiftList" Dic:nil Suc:^(int code, id info, NSString *msg) {
        [MBProgressHUD hideHUD];
        if (code == 0) {
            NSArray *infoA = [NSArray arrayWithArray:info];
            YBGiftPage *gView = [YBGiftPage showGiftWithData:infoA complete:^(int eventCode,NSDictionary *giftDic) {
                if (eventCode == -1) {
                    //关闭
                }else {
                    //发送socket
                    [weakSelf sendGiftInfo:giftDic];
                }
            }];
            gView.receiveID =  minstr(_liveUid);;
            gView.receiveStream = minstr(_liveStream);
            gView.sendType = SendGiftType_Live;
        }else {
            [MBProgressHUD showPop:msg];
        }
    } Fail:^(id fail) {
        [MBProgressHUD hideHUD];
    }];
     */
    YBGiftPage *gView = [YBGiftPage showGiftViewComplete:^(int eventCode,NSDictionary *giftDic) {
        if (eventCode == -1) {
            //关闭
        }else {
            //发送socket
            [weakSelf sendGiftInfo:giftDic];
        }
    }];
    gView.receiveID =  minstr(_liveUid);;
    gView.receiveStream = minstr(_liveStream);
    gView.sendType = SendGiftType_Live;
    [gView requestGiftData];
}
-(void)sendGiftInfo:(NSDictionary *)giftDic {
    if (self.playCtrEvent) {
        self.playCtrEvent(@"控制-礼物", giftDic);
    }
}

-(void)clikcCartBtn {
    _onsaleView = [YBOnSaleView showSaleWithAnchor:NO andAnchorID:minstr(_liveUid)];
    YBWeakSelf;
    _onsaleView.onSaleEvent = ^(OnSaleType saleCtrEvent,NSDictionary *goodsDic) {
        if (saleCtrEvent == OnSaleType_Info) {
            //用户端只能查看详情
            [weakSelf goGoodsInfo:goodsDic];
        }
    };
}
-(void)goGoodsInfo:(NSDictionary *)goodsDic {
    
    
    [PublicObj checkGoodsExistenceWithID:minstr([goodsDic valueForKey:@"id"]) Existence:^(int code, NSString *msg) {
        if (code ==0) {
            if ([minstr([goodsDic valueForKey:@"type"]) isEqual:@"1"]) {
                OutsideGoodsDetailVC *detail = [[OutsideGoodsDetailVC alloc]init];
                detail.goodsID = minstr([goodsDic valueForKey:@"id"]);
                detail.liveUid= _liveUid;
                [[YBBaseAppDelegate sharedAppDelegate] pushViewController:detail animated:YES];

            }else{
                CommodityDetailVC *detail = [[CommodityDetailVC alloc]init];
                detail.goodsID = minstr([goodsDic valueForKey:@"id"]);
                detail.backTags = @"live";
                detail.liveUid= _liveUid;
                [[YBBaseAppDelegate sharedAppDelegate] pushViewController:detail animated:YES];

            }

        }else{
            [MBProgressHUD showError:msg];

        }
    }];
}
#pragma mark - 连麦开始
//用户-主播连麦
-(void)clickLinkCtrBtn:(UIButton *)sender {
    if (_linkCtrBtn.selected) {
        //连麦中
        [self userEndLinkMic];
    }else {
        //未连麦
        if (_linkMicAskTimer) {
            [MBProgressHUD showPop:YZMsg(@"您已申请，请稍等")];
            return;
        }
        YBWeakSelf;
        [MBProgressHUD showMessage:@""];
        [WYNetworking postWithUrl:@"Linkmic.isMic" Dic:@{@"liveuid":_liveUid} Suc:^(int code, id info, NSString *msg) {
            [MBProgressHUD hideHUD];
            if (code == 0) {
                [MBProgressHUD showPop:YZMsg(@"连麦请求已发送")];
                [weakSelf userStartLinkMic];
            }else {
                [MBProgressHUD showPop:msg];
            }
        } Fail:^(id fail) {
            [MBProgressHUD hideHUD];
        }];
    }
}
-(void)userStartLinkMic {
    //发送socket
    if (self.playCtrEvent) {
        self.playCtrEvent(@"控制-用户申请连麦",@{});
    }
    if (!_linkMicAskTimer) {
        _linkMicAskLast = 11;
        _linkMicAskTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(linkMicAskEvent) userInfo:nil repeats:YES];
    }
}
-(void)linkMicAskEvent {
    _linkMicAskLast -- ;
    if (_linkMicAskLast <= 0) {
        [self destroyLinkMicAskTimer];
    }
}
-(void)destroyLinkMicAskTimer {
    if (_linkMicAskTimer) {
        [_linkMicAskTimer invalidate];
        _linkMicAskTimer = nil;
    }
}
-(void)userEndLinkMic {
    YBWeakSelf;
    NSDictionary *contentDic = @{@"title":@"",@"msg":YZMsg(@"是否断开连麦"),@"left":YZMsg(@"取消"),@"right":YZMsg(@"确定"),@"richImg":@""};
   _disconnectAlert = [YBAlertView showAlertView:contentDic complete:^(int eventType) {
       if (eventType == 1) {
           [weakSelf userSendLinkDisconnectSocket];
           [weakSelf stopUserLinkView];
       }
    }];
}

-(void)stopUserLinkView {
    
    _linkCtrBtn.selected = NO;
    [self destroyLinkMicAskTimer];
    if (_disconnectAlert) {
        [_disconnectAlert removeFromSuperview];
        _disconnectAlert = nil;
    }
    [self destroyLinkMicView];
    
}
/** socket主播同意-拒绝连麦 */
-(void)socketHostIsAgree:(BOOL)isAgree andSocDic:(NSDictionary *)socDic {
    [self destroyLinkMicAskTimer];
    if (isAgree) {
        //同意
        YBWeakSelf;
        NSDictionary *parDic = @{@"uid":[Config getOwnID],@"liveuid":minstr(_liveUid)};
        [WYNetworking postWithUrl:@"Linkmic.RequestLVBAddrForLinkMic" Dic:parDic Suc:^(int code, id info, NSString *msg) {
            if (code == 0) {
                NSDictionary *infoDic = [info firstObject];
                NSDictionary *subDic = @{@"userid":[Config getOwnID],
                                         @"uname":[Config getOwnNicename],
                                         @"playurl":minstr([infoDic valueForKey:@"playurl"]),
                                         @"pushurl":minstr([infoDic valueForKey:@"pushurl"]),
                };
                [weakSelf createLinkMicView:subDic];
            }else {
                [MBProgressHUD showPop:msg];
            }
        } Fail:^(id fail) {
            
        }];
    }else {
        //拒绝
        _linkCtrBtn.selected = NO;
    }
}
-(void)createLinkMicView:(NSDictionary *)linkDic {
    [self destroyLinkMicView];
    _linkCtrBtn.selected = YES;
    _linkMicView = [YBTxLinkMicView createLinkMicViewOnSuper:self andHostToHost:NO];
    _linkMicView.linkDic = linkDic;
    [_linkMicView linkMicShowViewHaveCloseBtn:NO];
    YBWeakSelf;
    _linkMicView.linkMicEvent = ^(TxLinkEventType eventType, NSDictionary *eventDic) {
        [weakSelf linkMicViewEvent:eventType andDic:eventDic];
    };
    
}
-(void)linkMicViewEvent:(TxLinkEventType)eventType andDic:(NSDictionary *)eventDic {
    switch (eventType) {
        case TxLinkEventType_StartPush:{
            //开始推流-发送socket
            YBWeakSelf;
//            NSDictionary *postDic = @{@"originStreamUrl":minstr([_playDic valueForKey:@"pull"])};
            NSDictionary *postDic = @{@"uid":[Config getOwnID],@"liveuid":minstr(_liveUid),@"stream":minstr(_liveStream)};
            [WYNetworking postWithUrl:@"Linkmic.RequestPlayUrlWithSignForLinkMic" Dic:postDic Suc:^(int code, id info, NSString *msg) {
                if (code == 0) {
                    NSDictionary *infoDic = [info firstObject];
                    NSString *streamUrlWithSignature = [infoDic valueForKey:@"streamUrlWithSignature"];
                    if (weakSelf.playCtrEvent) {
                        NSDictionary *eventDic = @{@"playurl":minstr([_linkMicView.linkDic valueForKey:@"playurl"]),
                                                   @"streamUrlWithSignature":streamUrlWithSignature,
                        };
                        weakSelf.playCtrEvent(@"控制-用户连麦重新拉流", eventDic);
                    }
                }else {
                    [MBProgressHUD showPop:msg];
                }
            } Fail:^(id fail) {
                
            }];
            
        }break;
        case TxLinkEventType_StopPush:{
            //结束推流
            [self userSendLinkDisconnectSocket];
        }break;
        case TxLinkEventType_LinkDisconnect:{
            //断开连麦
            [self userSendLinkDisconnectSocket];
        }break;
            
        default:
            break;
    }
}
-(void)destroyLinkMicView {
    if (_linkMicView) {
        [_linkMicView linkMicViewDismiss];
        _linkMicView = nil;
    }
}
-(void)userSendLinkDisconnectSocket {
    if (self.playCtrEvent) {
        self.playCtrEvent(@"控制-用户断开连麦",@{});
    }
}

/** socket主播下麦用户 */
-(void)socketHostDisconnect:(NSDictionary *)linkDic {
    [self stopUserLinkView];
}
/** socket主播忙碌 */
-(void)socketHostBusy:(NSDictionary *)busyDic {
    [self stopUserLinkView];
}
/** socket主播超时 */
-(void)socketHostTimeout:(NSDictionary *)timeoutDic {
    [self stopUserLinkView];
}
#pragma mark 连麦结束

/** 主播-主播:对方主播id */
-(void)showToHostInfoWithId:(NSString *)toHostId;{
    [self destroyPkTohostInfo];
    _pkTohostInfoV = [YBAnchorLinkInfo showHostInfoWithSuperView:self];
    [_pkTohostInfoV reqToHostInfo:toHostId];
    YBWeakSelf;
    _pkTohostInfoV.attentEvent = ^(int isAttent) {
        weakSelf.pkFollowBtn.hidden = isAttent;
    };
    //遮罩【控制层级响应点击,实际UI显示在_pkTohostInfoV里的子视图】
    _pkFollowBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    _pkFollowBtn.backgroundColor = UIColor.clearColor;
    [_pkFollowBtn addTarget:self action:@selector(clickPkFollow) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:_pkFollowBtn];
    [_pkFollowBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.equalTo(self.mas_right);
        make.bottom.equalTo(_pkTohostInfoV.mas_bottom);
        make.width.height.mas_equalTo(40);
    }];
}
-(void)clickPkFollow {
    _pkFollowBtn.hidden = YES;
    [_pkTohostInfoV updateFollow];
}
-(void)destroyPkTohostInfo {
    if (_pkTohostInfoV) {
        [_pkTohostInfoV removeFromSuperview];
        _pkTohostInfoV = nil;
        [_pkFollowBtn removeFromSuperview];
        _pkFollowBtn = nil;
    }
}
#pragma mark - PK
/** PK 开始 */
-(void)socketLinkPKStart:(NSDictionary *)pkDic;{
    [self destroyPkView];
    NSString *pkTime = @"300";
    if (pkDic) {
        pkTime = minstr([pkDic valueForKey:@"pk_time"]);
    }
    _pkView = [[YBAnchorPKView alloc]initWithFrame:CGRectMake(0, 130+statusbarHeight, _window_width, _window_width*2/3+20) andTime:pkTime];
    YBWeakSelf;
    _pkView.pkViewEvent = ^{
        [weakSelf destroyPkView];
    };
    //[_showUIView addSubview:_pkView];
    [self addSubview:_pkView];
    
    [self bringToFront];
}
///层级关系处理
-(void)bringToFront {
    [_showUIView bringSubviewToFront:_chatTool];
    [_showUIView bringSubviewToFront:_liveChatView];
    [_showUIView bringSubviewToFront:_goodsBriefView];
    [_showUIView bringSubviewToFront:haohualiwuV];
    [_showUIView bringSubviewToFront:_paintedShowRegion];
    [_showUIView bringSubviewToFront:liansongliwubottomview];
    [_showUIView bringSubviewToFront:_userAnimation];
    [_showUIView bringSubviewToFront:_turntableView];
}
/** PK 结果 */
-(void)socketLinkPKReult:(NSDictionary *)pkDic;{
    int win;
    if ([minstr([pkDic valueForKey:@"win_uid"]) isEqual:@"0"]) {
        win = 0;
    }else if ([minstr([pkDic valueForKey:@"win_uid"]) isEqual:minstr([_playDic valueForKey:@"uid"])]) {
        win = 1;
    }else{
        win = 2;
    }
    [_pkView showPkResult:pkDic andWin:win];
}
/** PK 进度 */
-(void)socketLinkPKProgress:(NSDictionary *)pkDic;{
    NSString *blueNum;
    NSString *redNum;
    CGFloat progress = 0.0;
    if ([minstr([pkDic valueForKey:@"pkuid1"]) isEqual:minstr([_playDic valueForKey:@"uid"])]) {
        blueNum = minstr([pkDic valueForKey:@"pktotal1"]);
        redNum = minstr([pkDic valueForKey:@"pktotal2"]);
    }else{
        redNum = minstr([pkDic valueForKey:@"pktotal1"]);
        blueNum = minstr([pkDic valueForKey:@"pktotal2"]);
    }
    if ([blueNum isEqual:@"0"] && [redNum isEqual:@"0"]) {
        progress = 0.5;
    }else{
        if ([blueNum isEqual:@"0"]) {
            progress = 0.2;
        }else if ([redNum isEqual:@"0"]) {
            progress = 0.8;
        }else{
            CGFloat ppp = [blueNum floatValue]/([blueNum floatValue] + [redNum floatValue]);
            if (ppp < 0.2) {
                progress = 0.2;
            }else if (ppp > 0.8){
                progress = 0.8;
            }else{
                progress = ppp;
            }
        }
    }
    [_pkView updateProgress:progress withBlueNum:blueNum withRedNum:redNum];
}
-(void)destroyPkView {
    if (_pkView) {
        [_pkView removeTimer];
        [_pkView removeFromSuperview];
        _pkView = nil;
        [_pkFollowBtn removeFromSuperview];
        _pkFollowBtn = nil;
    }
}

#pragma mark - /** 键盘弹起事件: 目前只处理 PK和连麦 的界面相对位置不变*/
-(void)keyBoardNoticeIsShow:(BOOL)isShow andHeight:(CGFloat)height;{
    _pkView.top = 130+statusbarHeight + height;
    [_linkMicView keyBoardNoticeIsShow:isShow andHeight:height];
}

#pragma mark - 进房间更新用户列表、映票
-(void)enterroomUpdateInfo:(NSDictionary *)roomDic {
    
    _guardInfo = @{};
    if ([[roomDic valueForKey:@"guard"] isKindOfClass:[NSDictionary class]]) {
        _guardInfo = [roomDic valueForKey:@"guard"];
    }
    NSArray *userListA = [NSArray arrayWithArray:[roomDic valueForKey:@"userlists"]];
    [_userListView updateListCount:userListA];
    
    NSString *isAttent = minstr([roomDic valueForKey:@"isattention"]);
    if ([isAttent isEqual:@"0"]) {
        [_followBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.height.mas_equalTo(24);
            make.centerY.equalTo(_hostAvatarBtn);
            make.left.equalTo(_hostNameL.mas_right).offset(6);
        }];
    }
    
    [self updateVotes:minstr([roomDic valueForKey:@"votestotal"])];
    [self updateGuardNums:minstr([roomDic valueForKey:@"guard_nums"])];
    
    //展示的商品
    NSDictionary *goodsDic = [roomDic valueForKey:@"show_goods"];
    NSString *goodsID = minstr([goodsDic valueForKey:@"goodsid"]);
    if (![PublicObj checkNull:goodsID] && ![goodsID isEqual:@"0"]) {
        [self goodsBriefIsShow:YES withInfo:goodsDic];
    }
    
}
#pragma mark - 用户点亮
-(void)socketLightAnimation {
    [_botBtnFunView layoutIfNeeded];
    
    starX = CGRectGetMaxX(_botBtnFunView.frame)-20 ;
    starY = _botBtnFunView.frame.origin.y;
    starImage = [[UIImageView alloc]initWithFrame:CGRectMake(starX, starY, 30, 30)];
    starImage.contentMode = UIViewContentModeScaleAspectFit;
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"plane_heart_cyan.png",@"plane_heart_pink.png",@"plane_heart_red.png",@"plane_heart_yellow.png",@"plane_heart_heart.png", nil];
    NSInteger random = arc4random()%array.count;
    starImage.image = [UIImage imageNamed:[array objectAtIndex:random]];
    [UIView animateWithDuration:0.2 animations:^{
        starImage.alpha = 1.0;
        starImage.frame = CGRectMake(starX+random - 10, starY-random - 30, 30, 30);
        CGAffineTransform transfrom = CGAffineTransformMakeScale(1.3, 1.3);
        starImage.transform = CGAffineTransformScale(transfrom, 1, 1);
    }];
    [_showUIView addSubview:starImage];
    [_showUIView sendSubviewToBack:starImage];
    CGFloat finishX = _window_width - round(arc4random() % 200);
    //  动画结束点的Y值
    CGFloat finishY = 200;
    //  imageView在运动过程中的缩放比例
    CGFloat scale = round(arc4random() % 2) + 0.7;
    // 生成一个作为速度参数的随机数
    CGFloat speed = 1 / round(arc4random() % 900) + 0.6;
    //  动画执行时间
    NSTimeInterval duration = 4 * speed;
    //  如果得到的时间是无穷大，就重新附一个值（这里要特别注意，请看下面的特别提醒）
    if (duration == INFINITY) duration = 2.412346;
    //  开始动画
    [UIView beginAnimations:nil context:(__bridge void *_Nullable)(starImage)];
    //  设置动画时间
    [UIView setAnimationDuration:duration];
    //  设置imageView的结束frame
    starImage.frame = CGRectMake( finishX, finishY, 30 * scale, 30 * scale);
    //  设置渐渐消失的效果，这里的时间最好和动画时间一致
    [UIView animateWithDuration:duration animations:^{
        starImage.alpha = 0;
    }];
    //  结束动画，调用onAnimationComplete:finished:context:函数
    [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
    //  设置动画代理
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
    
}
/// 动画完后销毁iamgeView
- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
    if ([finished isEqual:[NSNumber numberWithBool:YES]]) {
        UIImageView *imageViewsss = (__bridge UIImageView *)(context);
        [imageViewsss removeFromSuperview];
        imageViewsss = nil;
    }
}
#pragma mark - 清理聊天消息
-(void)clearChatList;{
    [_liveChatView clearChatList];
}
#pragma mark - 发言
-(void)socketChatDic:(NSDictionary *)chatDic {
    [_liveChatView reloadMsg:chatDic];
}
#pragma mark - 用户离开
-(void)socketUserLeave:(NSDictionary *)leaveDic {
    NSLog(@"leave");
    [_userListView userEventOfType:UserEvent_Leave andInfo:leaveDic];
}
#pragma mark - 用户进入
-(void)socketUserEnter:(NSDictionary *)enterDic {
    NSLog(@"enter");
    [_userListView userEventOfType:UserEvent_Enter andInfo:enterDic];
    NSString *vipType = [NSString stringWithFormat:@"%@",[[enterDic valueForKey:@"ct"] valueForKey:@"vip_type"]];
    //wyt_vip 隐藏
    vipType = @"0";
    NSString *guardType = [NSString stringWithFormat:@"%@",[[enterDic valueForKey:@"ct"] valueForKey:@"guard_type"]];
    //vip暂时没有动画，只有守护有
    if ([vipType isEqual:@"1"] || [guardType isEqual:@"1"] || [guardType isEqual:@"2"]) {
        //进场动画
        [_userAnimation addUserMove:enterDic];
    }
    
    NSDictionary *ctDic = [enterDic valueForKey:@"ct"];
    NSDictionary *chatDic = @{@"userName":minstr([ctDic valueForKey:@"user_nickname"]),
                              @"contentChat":YZMsg(@" 进入了直播间"),
                              @"id":minstr([ctDic valueForKey:@"id"]),
                              @"titleColor":@"userLogin",
                              @"usertype":minstr([ctDic valueForKey:@"usertype"]),
                              @"guard_type":minstr([ctDic valueForKey:@"guard_type"]),
    };
    [self socketChatDic:chatDic];
}
#pragma mark - 送礼物
-(void)socketSendGift:(NSDictionary *)giftDic {
    
    NSDictionary *ctDic = [giftDic valueForKey:@"ct"];
    NSMutableDictionary *showDic = @{@"avatar":minstr([giftDic valueForKey:@"uhead"]),
                                     @"nickname":minstr([giftDic valueForKey:@"uname"]),
                                     @"paintedHeight":[giftDic valueForKey:@"paintedHeight"]?[giftDic valueForKey:@"paintedHeight"]:@"",
                                     @"paintedPath":[giftDic valueForKey:@"paintedPath"]?[giftDic valueForKey:@"paintedPath"]:@[],//数组
                                     @"paintedWidth":[giftDic valueForKey:@"paintedWidth"]?[giftDic valueForKey:@"paintedWidth"]:@"",
    }.mutableCopy;
    [showDic addEntriesFromDictionary:ctDic];
    [self showGift:showDic];
    
    NSString *votes = minstr([ctDic valueForKey:@"votestotal"]);
    [self updateVotes:votes];
}
#pragma mark - 展示主播介绍的商品
-(void)socketOnSale:(NSDictionary *)onSaleDic; {
    //1-展示  0-隐藏
    BOOL show = [minstr([onSaleDic valueForKey:@"action"]) boolValue];
    [self goodsBriefIsShow:show withInfo:onSaleDic];
    
}
#pragma mark - 更新映票
-(void)updateVotes:(NSString *)votes {
    _hostVotesBtn.hidden = NO;
    /// 青少年
    int youngSwitch = [YBYoungManager shareInstance].youngSwitch;
    if (youngSwitch == 1) {
        _hostVotesBtn.hidden = YES;
    }
    NSString *votesStr = [NSString stringWithFormat:@"%@ %@",[common name_votes],votes];
    [_hostVotesBtn setTitle:votesStr forState:0];
}
#pragma mark - 更新守护数量
-(void)updateGuardNums:(NSString *)nums {
    if ([nums intValue] <= 0) {
        return;
    }
    NSString *guardStr = [NSString stringWithFormat:YZMsg(@"守护 %@人"),nums];
    [_hostGuardBtn setTitle:guardStr forState:0];
    [self layoutSubviews];
}
#pragma mark - /** 计时器刷新列表 */
-(void)timerReloadList {
    [_userListView timerReloadList];
}
#pragma mark - /** 私信未读数 */
-(void)updateUnread:(int)unread {
    _redPoint.hidden = YES;
    if (unread > 0) {
        _redPoint.hidden = NO;
    }
}
#pragma mark - 打赏开始
-(void)showGift:(NSDictionary *)giftDic {
    NSString *type = minstr([giftDic valueForKey:@"type"]);
    if (!continueGifts) {
        continueGifts = [[continueGift alloc]initWithFrame:CGRectMake(0, 0, liansongliwubottomview.width, liansongliwubottomview.height)];
        [liansongliwubottomview addSubview:continueGifts];
        //初始化礼物空位
        [continueGifts initGift];
        YBWeakSelf;
        continueGifts.rkPaintedEvent = ^(NSDictionary *giftDic) {
            [weakSelf showPaintedGift:giftDic];
        };
    }
    if ([type isEqual:@"1"]) {
        [self expensiveGift:giftDic];
    }else{
        //手绘以及普通礼物都进 continueGifts 由它执行队列
        [continueGifts GiftPopView:giftDic andLianSong:@"Y"];
    }
}
-(void)showPaintedGift:(NSDictionary *)giftDic {
    //手绘显示动画
    _paintedShowRegion.giftPathStr = minstr([giftDic valueForKey:@"gifticon"]);
    _paintedShowRegion.paintedWidth = [minstr([giftDic valueForKey:@"paintedWidth"]) floatValue];
    _paintedShowRegion.paintedHeight = [minstr([giftDic valueForKey:@"paintedHeight"]) floatValue];
    _paintedShowRegion.paintedPointArray = [NSArray arrayWithArray:[giftDic valueForKey:@"paintedPath"]];
}
/************ 礼物弹出及队列显示开始 *************/
-(void)expensiveGiftdelegate:(NSDictionary *)giftData{
    if (!haohualiwuV) {
        haohualiwuV = [[expensiveGiftV alloc]init];
        haohualiwuV.delegate = self;
        [_showUIView addSubview:haohualiwuV];
    }
    if (giftData == nil) {
        
    }else {
        [haohualiwuV addArrayCount:giftData];
    }
    if(haohualiwuV.haohuaCount == 0){
        [haohualiwuV enGiftEspensive];
    }
}
-(void)expensiveGift:(NSDictionary *)giftData{
    if (!haohualiwuV) {
        haohualiwuV = [[expensiveGiftV alloc]init];
        haohualiwuV.delegate = self;
        [_showUIView addSubview:haohualiwuV];
    }
    if (giftData == nil) {
     
    }else {
        [haohualiwuV addArrayCount:giftData];
    }
    if(haohualiwuV.haohuaCount == 0){
        [haohualiwuV enGiftEspensive];
    }
}
#pragma mark - 销毁
-(void)destroyCtrSubView {
    _avatarEffect.hidden = NO;
    [self goodsBriefIsShow:NO withInfo:@{}];
    if (continueGifts) {
        [continueGifts stopTimerAndArray];
        [continueGifts initGift];
        [continueGifts removeFromSuperview];
        continueGifts = nil;
    }
    if (haohualiwuV) {
        [haohualiwuV stopHaoHUaLiwu];
        [haohualiwuV removeFromSuperview];
        haohualiwuV.expensiveGiftCount = nil;
        haohualiwuV = nil;
    }
    [_userAnimation removeAnimation];
    liansongliwubottomview.top = statusbarHeight+200;
    if (_onsaleView) {
        [_onsaleView removeFromSuperview];
    }
    if (_paintedShowRegion) {
        [_paintedShowRegion destroyPaitend];
    }
    [self desTroyDaytaskView];
    _turntableView.hidden = YES;
    [self removeShouhuView];
    [self destroyLinkMicAskTimer];
    [self userSendLinkDisconnectSocket];
    [self stopUserLinkView];
    [self destroyPkView];
}

#pragma mark - 打赏结束

#pragma mark - 公屏聊天处点击回调
-(void)roomChatCallBack:(NSString *)eventType andEventInfo:(NSDictionary *)eventDic {
    
    if ([eventType isEqual:@"房间聊天-用户信息"] && self.playCtrEvent) {
        [_chatTool.chatTF resignFirstResponder];
        //@{@"id":model.userID,@"name":model.userName}
        self.playCtrEvent(@"控制-信息卡", eventDic);
    }
    
}
#pragma mark - 用户列表回调
-(void)userListCallBack:(NSString *)eventType andEventInfo:(NSDictionary *)eventDic{
    if ([eventType isEqual:@"用户列表-用户信息"] && self.playCtrEvent) {
        [_chatTool.chatTF resignFirstResponder];
        //@{@"id":model.userID,@"name":model.userName}
        self.playCtrEvent(@"控制-信息卡", eventDic);
    }
}

#pragma mark - 聊天工具栏回调
-(void)chatToolCallBack:(NSString *)eventType andContent:(NSString *)eventContent{
    //去发送socke；
    if ([eventType isEqual:@"直播聊天-发送"] && self.playCtrEvent) {
        self.playCtrEvent(@"控制-直播聊天", @{@"ct":eventContent});
    }
    
}
#pragma mark - 商品简介-展示/隐藏
-(void)goodsBriefIsShow:(BOOL)showBrief withInfo:(NSDictionary *)infoDic; {
    int youngSwitch = [YBYoungManager shareInstance].youngSwitch;
    if (youngSwitch == 1 && showBrief == YES) {
        return;
    }
    _goodsBriefView.hidden = !showBrief;
    _goodsBriefView.touserID = _liveUid;
    _goodsBriefView.goodsDic = infoDic;
    [UIView animateWithDuration:0.5 animations:^{
        if (showBrief) {
            _liveChatView.y = _window_height-ChatViewHeight-60-ShowDiff-GoodsBriefHeight;
        }else{
            _liveChatView.y = _window_height-ChatViewHeight-60-ShowDiff;
        }
    }];
}
#pragma mark - 每日任务、转盘代理
/** 点击图片回调 */
- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index {
    NSLog(@"点击轮播----------index:%ld",index);
    if (index == 0) {
        //每日任务
        [self desTroyDaytaskView];
        _dayTaskView = [YBDayTaskView showRoomDayTask];
        _dayTaskView.liveuid = minstr(_liveUid);
        [_dayTaskView requestListData];
    }else {
        //转盘
        _turntableView.hidden = NO;
        _turntableView.zhuboMsg = _playDic;
        [_turntableView show];
    }
}

/** 图片滚动回调 */
- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index {
    self.roomGamePage.currentPage = index;
}
#pragma mark - 转盘
- (void)turntableZhongjianla{
    //转盘和礼物不会同时展现,故这里可以不处理
}
#pragma mark - 守护
-(void)clickGuardBtn {
    
    if (!gShowView) {
        gShowView = [[guardShowView alloc]initWithFrame:CGRectMake(0, 0, _window_width, _window_height) andUserGuardMsg:_guardInfo andLiveUid:minstr([_playDic valueForKey:@"uid"])];
        gShowView.delegate = self;
        [_showUIView addSubview:gShowView];
    }
    [gShowView show];
}
- (void)buyOrRenewGuard{
    [self removeShouhuView];
    if (!guardView) {
        guardView = [[shouhuView alloc]init];
        guardView.liveUid = minstr([_playDic valueForKey:@"uid"]);
        guardView.stream = minstr([_playDic valueForKey:@"stream"]);
        guardView.delegate = self;
        guardView.guardType = minstr([_guardInfo valueForKey:@"type"]);
        [_showUIView addSubview:guardView];
    }
    [guardView show];
}
- (void)removeShouhuView{
    if (guardView) {
        [guardView removeFromSuperview];
        guardView = nil;
    }
    if (gShowView) {
        [gShowView removeFromSuperview];
        gShowView = nil;
    }
   
}
- (void)buyShouhuSuccess:(NSDictionary *)dic{
    _guardInfo = dic;
    if (self.playCtrEvent) {
        self.playCtrEvent(@"控制-购买守护",dic);
    }
}
- (void)socketUpdateGuardMsg:(NSDictionary *)dic{
    
    [self updateVotes:minstr([dic valueForKey:@"votestotal"])];
    [self updateGuardNums:minstr([dic valueForKey:@"guard_nums"])];
    [self timerReloadList];
}

#pragma mark - set/get
- (UIImageView *)avatarEffect {
    if (!_avatarEffect) {
        _avatarEffect = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, _window_width, _window_height)];
        _avatarEffect.contentMode = UIViewContentModeScaleAspectFill;
        _avatarEffect.clipsToBounds = YES;
        UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
        UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur];
        effectview.frame = CGRectMake(0, 0,_window_width,_window_height);
        [_avatarEffect addSubview:effectview];
    }
    return _avatarEffect;
}

- (UIScrollView *)horScrollView {
    if (!_horScrollView) {
        _horScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, _window_width, _window_height)];
        _horScrollView.backgroundColor = UIColor.clearColor;
        _horScrollView.contentSize = CGSizeMake(_window_width*2, 0);
        [_horScrollView setContentOffset:CGPointMake(_window_width, 0) animated:NO];
        _horScrollView.pagingEnabled = YES;
        _horScrollView.showsHorizontalScrollIndicator = NO;
        _horScrollView.bounces = NO;
        
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGes)];
        tap.delegate = self;
        [_horScrollView addGestureRecognizer:tap];
        
        _showUIView = [[UIView alloc]initWithFrame:CGRectMake(_window_width, 0, _window_width, _window_height)];
        _showUIView.backgroundColor = UIColor.clearColor;
        [_horScrollView addSubview:_showUIView];
        
        //手绘礼物
        [_showUIView addSubview:self.paintedShowRegion];
        //连送礼物显示区域
        liansongliwubottomview = [[UIView alloc]init];
        liansongliwubottomview.userInteractionEnabled = NO;
        liansongliwubottomview.backgroundColor = UIColor.clearColor;
        [_showUIView addSubview:liansongliwubottomview];
        liansongliwubottomview.frame = CGRectMake(0, statusbarHeight + 200,_window_width,140);
        
    }
    return _horScrollView;
}

- (UIView *)hostInfoView {
    if (!_hostInfoView) {
        _hostInfoView = [[UIView alloc]init];
        _hostInfoView.layer.cornerRadius = 17;
        _hostInfoView.layer.masksToBounds = YES;
        _hostInfoView.backgroundColor = RGB_COLOR(@"#000000", 0.5);
        
        _hostAvatarBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _hostAvatarBtn.layer.masksToBounds = YES;
        _hostAvatarBtn.layer.cornerRadius = 15;
        [_hostAvatarBtn.imageView setContentMode:UIViewContentModeScaleAspectFill];
        _hostAvatarBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
        _hostAvatarBtn.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
        [_hostAvatarBtn addTarget:self action:@selector(clickHostAvatarBtn) forControlEvents:UIControlEventTouchUpInside];
        [_hostInfoView addSubview:_hostAvatarBtn];
        [_hostAvatarBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(_hostInfoView);
            make.left.equalTo(_hostInfoView).offset(2);
            make.width.height.mas_equalTo(30);
        }];
        
        _hostNameL = [[UILabel alloc]init];
        _hostNameL.font = SYS_Font(13);
        _hostNameL.textColor = RGB_COLOR(@"#ffffff", 1);
        [_hostInfoView addSubview:_hostNameL];
        [_hostNameL mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(_hostAvatarBtn.mas_centerY).multipliedBy(0.65);
            make.left.equalTo(_hostAvatarBtn.mas_right).offset(5);
        }];
        
        _hostIDL = [[UILabel alloc]init];
        _hostIDL.font = SYS_Font(10);
        _hostIDL.textColor = RGB_COLOR(@"#f0f0f0", 1);
        [_hostInfoView addSubview:_hostIDL];
        [_hostIDL mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.equalTo(_hostNameL);
            make.centerY.equalTo(_hostAvatarBtn.mas_centerY).multipliedBy(1.53);
        }];
        
        _followBtn = [[UIButton alloc]init];
        [_followBtn setTitle:YZMsg(@"关注") forState:0];
        _followBtn.titleLabel.font = SYS_Font(10);
        _followBtn.layer.cornerRadius = 12;
        _followBtn.layer.masksToBounds = YES;
        _followBtn.backgroundColor = Pink_Cor;
        _followBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 8, 0, 8);
        [_followBtn addTarget:self action:@selector(clickFollowBtn) forControlEvents:UIControlEventTouchUpInside];
        [_hostInfoView addSubview:_followBtn];
        [_followBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.mas_equalTo(0);//默认宽度为0,进房间后更新
            make.height.mas_equalTo(24);
            make.centerY.equalTo(_hostAvatarBtn);
            make.left.equalTo(_hostNameL.mas_right).offset(6);
        }];
    }
    return _hostInfoView;
}

- (UIButton *)hostVotesBtn {
    if (!_hostVotesBtn) {
        _hostVotesBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        //无点击事件
        [_hostVotesBtn setTitleColor:RGB_COLOR(@"#ffffff", 1) forState:0];
        _hostVotesBtn.titleLabel.font = SYS_Font(10);
        _hostVotesBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 11, 0, 11);
        _hostVotesBtn.backgroundColor = RGB_COLOR(@"#000000", 0.5);
        _hostVotesBtn.layer.masksToBounds = YES;
        _hostVotesBtn.layer.cornerRadius = 11;
        _hostVotesBtn.hidden = YES;
    }
    return _hostVotesBtn;
}
- (UIButton *)hostGuardBtn {
    if (!_hostGuardBtn) {
        _hostGuardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        _hostGuardBtn.titleLabel.font = SYS_Font(10);
        _hostGuardBtn.layer.masksToBounds = YES;
        _hostGuardBtn.layer.cornerRadius = 11;
        [_hostGuardBtn setTitleColor:RGB_COLOR(@"#ffffff", 1) forState:0];
        _hostGuardBtn.backgroundColor = RGB_COLOR(@"#000000", 0.5);
        [_hostGuardBtn setTitle:YZMsg(@"守护 虚位以待") forState:0];
        [_hostGuardBtn setImage:[UIImage imageNamed:@"pub_white_right"] forState:0];
        [_hostGuardBtn addTarget:self action:@selector(clickGuardBtn) forControlEvents:UIControlEventTouchUpInside];
        _hostGuardBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 8, 0, 5);
    }
    return _hostGuardBtn;;
}
- (SDCycleScrollView *)roomGameCycle {
    if (!_roomGameCycle) {
        
        _roomGameCycle = [[SDCycleScrollView alloc]init];
        _roomGameCycle.backgroundColor = [UIColor clearColor];
        _roomGameCycle.bannerImageViewContentMode = UIViewContentModeScaleAspectFit;
        _roomGameCycle.delegate = self;
        _roomGameCycle.pageControlStyle = SDCycleScrollViewPageContolStyleNone;
        _roomGameCycle.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        _roomGameCycle.autoScrollTimeInterval = 3.0;
        _roomGameCycle.currentPageDotColor = [UIColor whiteColor];
        _roomGameCycle.pageDotColor = [[UIColor whiteColor] colorWithAlphaComponent:0.4];
        _roomGameCycle.pageControlStyle = SDCycleScrollViewPageContolStyleNone;
        _roomGameCycle.imageURLStringsGroup = _roomGameArray;
        
    }
    return _roomGameCycle;
}
- (YBPageControl *)roomGamePage {
    if (!_roomGamePage) {
        _roomGamePage = [[YBPageControl alloc]init];
        _roomGamePage.numberOfPages = _roomGameArray.count;
        _roomGamePage.currentPage = 0;
        _roomGamePage.pageIndicatorTintColor = [UIColor grayColor];
        _roomGamePage.currentPageIndicatorTintColor = [UIColor whiteColor];
//        _roomGamePage.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.7, 0.7);
        _roomGamePage.userInteractionEnabled = NO;
    }
    return _roomGamePage;
}
- (turntableView *)turntableView {
    if (!_turntableView) {
        _turntableView = [[turntableView alloc]init];
        _turntableView.zhuboMsg = _playDic;
        _turntableView.delegate = self;
    }
    return _turntableView;
}
- (YBUserListView *)userListView {
    if (!_userListView) {
        YBWeakSelf;
        _userListView = [[YBUserListView alloc]init];
        _userListView.backgroundColor = UIColor.clearColor;
        if (![PublicObj checkNull:_liveUid] && ![PublicObj checkNull:_liveStream]) {
            _userListView.liveUid = minstr(_liveUid);
            _userListView.liveStream = minstr(_liveStream);
        }
        _userListView.listEvent = ^(NSString *eventStr, NSDictionary *eventDic) {
            [weakSelf userListCallBack:eventStr andEventInfo:eventDic];
        };
    }
    return _userListView;
}

- (YBLiveChatView *)liveChatView {
    if (!_liveChatView) {
        YBWeakSelf;
        _liveChatView = [[YBLiveChatView alloc]initWithFrame:CGRectMake(10,_window_height-ChatViewHeight-60-ShowDiff, ChatViewWidth, ChatViewHeight)];
        _liveChatView.backgroundColor = UIColor.clearColor;
        _liveChatView.liveChatEvent = ^(NSString *eventStr, NSDictionary *eventDic) {
            [weakSelf roomChatCallBack:eventStr andEventInfo:eventDic];
        };
    }
    return _liveChatView;
}
- (YBGoodsBriefView *)goodsBriefView {
    if (!_goodsBriefView) {
        _goodsBriefView = [[YBGoodsBriefView alloc]initWithFrame:CGRectMake(10, _window_height-GoodsBriefHeight-60-ShowDiff, GoodsBriefWidth, GoodsBriefHeight)];
        _goodsBriefView.backgroundColor = UIColor.clearColor;
        _goodsBriefView.hidden = YES;
    }
    return _goodsBriefView;
}
- (YBUserEnterAnimation *)userAnimation {
    if (!_userAnimation) {
        _userAnimation = [[YBUserEnterAnimation alloc]init];
    }
    return _userAnimation;
}
- (UIButton *)linkCtrBtn {
    if (!_linkCtrBtn) {
        _linkCtrBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_linkCtrBtn addTarget:self action:@selector(clickLinkCtrBtn:) forControlEvents:UIControlEventTouchUpInside];
        [_linkCtrBtn setTitleColor:RGB_COLOR(@"#dddddd", 1) forState:0];
        [_linkCtrBtn setTitleColor:RGB_COLOR(@"#dddddd", 1) forState:UIControlStateSelected];
        [_linkCtrBtn setTitle:YZMsg(@"连麦互动") forState:0];
        [_linkCtrBtn setTitle:YZMsg(@"结束连麦") forState:UIControlStateSelected];
        _linkCtrBtn.titleLabel.font = SYS_Font(8);
        [_linkCtrBtn setImage:[UIImage imageNamed:@"直播-连控彩"] forState:0];
        [_linkCtrBtn setImage:[UIImage imageNamed:@"直播-连控彩"] forState:UIControlStateSelected];
        _linkCtrBtn.layer.cornerRadius = 8;
        _linkCtrBtn.layer.masksToBounds = YES;
        _linkCtrBtn.backgroundColor = RGB_COLOR(@"#000000", 0.4);
    }
    return _linkCtrBtn;
}
- (UIView *)botBtnFunView {
    if (!_botBtnFunView) {
        _botBtnFunView = [[UIView alloc]initWithFrame:CGRectMake(0, _window_height-50-ShowDiff, _window_width, 40)];
        CGFloat btnW = 30;
        
        UIButton *keyBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [keyBtn addTarget:self action:@selector(clickKeyBtn) forControlEvents:UIControlEventTouchUpInside];
        [keyBtn setImage:[UIImage imageNamed:@"live_聊天"] forState:0];
        [_botBtnFunView addSubview:keyBtn];
        [keyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.height.mas_equalTo(btnW);
            make.centerY.equalTo(_botBtnFunView);
            make.left.equalTo(_botBtnFunView.mas_left).offset(10);
        }];
        
        _closeLiveBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_closeLiveBtn addTarget:self action:@selector(clikcCloseLiveBtn) forControlEvents:UIControlEventTouchUpInside];
        [_closeLiveBtn setImage:[UIImage imageNamed:@"live_关闭"] forState:0];
        [_botBtnFunView addSubview:_closeLiveBtn];
        [_closeLiveBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.height.mas_equalTo(btnW);
            make.centerY.equalTo(_botBtnFunView);
            make.right.equalTo(_botBtnFunView.mas_right).offset(-10);
        }];
        
        _shareBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_shareBtn addTarget:self action:@selector(clikcShareBtn) forControlEvents:UIControlEventTouchUpInside];
        [_shareBtn setImage:[UIImage imageNamed:@"live_分享"] forState:0];
        [_botBtnFunView addSubview:_shareBtn];
        [_shareBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.height.mas_equalTo(btnW);
            make.centerY.equalTo(_botBtnFunView);
            make.right.equalTo(_closeLiveBtn.mas_left).offset(-10);
        }];
        
        _msgBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_msgBtn addTarget:self action:@selector(clikcMsgBtn) forControlEvents:UIControlEventTouchUpInside];
        [_msgBtn setImage:[UIImage imageNamed:@"live_私信"] forState:0];
        [_botBtnFunView addSubview:_msgBtn];
        [_msgBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.height.mas_equalTo(btnW);
            make.centerY.equalTo(_botBtnFunView);
            make.right.equalTo(_shareBtn.mas_left).offset(-10);
        }];
        
        _redPoint = [[UILabel alloc]init];
        _redPoint.layer.masksToBounds = YES;
        _redPoint.layer.cornerRadius = 4;
        _redPoint.backgroundColor = UIColor.redColor;
        [_botBtnFunView addSubview:_redPoint];
        _redPoint.hidden = YES;
        [_redPoint mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.height.mas_equalTo(8);
            make.centerY.equalTo(_msgBtn.mas_top);
            make.right.equalTo(_msgBtn.mas_right).offset(-4);
        }];
        
        _cartBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_cartBtn addTarget:self action:@selector(clikcCartBtn) forControlEvents:UIControlEventTouchUpInside];
        [_cartBtn setBackgroundImage:[UIImage imageNamed:@"live_车底"] forState:0];
        [_cartBtn setImage:[UIImage imageNamed:@"live_车"] forState:0];
        [_botBtnFunView addSubview:_cartBtn];
        _cartBtn.hidden = YES;
        [_cartBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.height.mas_equalTo(btnW);
            make.width.mas_equalTo(0);
            make.centerY.equalTo(_botBtnFunView);
            make.right.equalTo(_msgBtn.mas_left);
        }];
        
        _giftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_giftBtn addTarget:self action:@selector(clikcGiftBtn) forControlEvents:UIControlEventTouchUpInside];
        [_giftBtn setImage:[UIImage imageNamed:@"live_礼物"] forState:0];
        [_botBtnFunView addSubview:_giftBtn];
        [_giftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.width.height.mas_equalTo(btnW);
            make.centerY.equalTo(_botBtnFunView);
            make.right.equalTo(_cartBtn.mas_left).offset(-10);
        }];
        
    }
    return _botBtnFunView;
}
-(void)removeGoodsBtnAnimation {
    if (_cartBtn.hidden == YES) {
        return;
    }
    [_cartBtn.layer removeAllAnimations];
}
- (void)showGoodsBtnAnimaition{
    if (_cartBtn.hidden == YES) {
        return;
    }
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    animation.duration = 0.7;
    animation.repeatCount = 99999999;
    animation.autoreverses = YES;
    animation.fromValue = [NSNumber numberWithFloat:0.7];
    animation.toValue = [NSNumber numberWithFloat:1.1];
    [_cartBtn.imageView.layer addAnimation:animation forKey:nil];
}
- (YBChatToolBar *)chatTool {
    if (!_chatTool) {
        YBWeakSelf;
        _chatTool = [[YBChatToolBar alloc]initWithFrame:CGRectMake(0, _window_height-44, _window_width, 44)];
        _chatTool.hidden = YES;
        _chatTool.chatToolEvnt = ^(NSString *eventType, NSString *eventContent) {
            [weakSelf chatToolCallBack:eventType andContent:eventContent];
        };
    }
    return _chatTool;
}
-(void)tapGes {
    if ([_chatTool.chatTF isFirstResponder] || _keyBoardIsShow) {
        [_chatTool.chatTF resignFirstResponder];
        [[YBBaseAppDelegate sharedAppDelegate].topViewController.view endEditing:YES];
    }else {
        //点亮
        [self socketLightAnimation];
        if (self.playCtrEvent) {
            self.playCtrEvent(@"控制-点亮", @{});
        }
    }
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;{
    if ([touch.view isDescendantOfView:_botBtnFunView]
        ||[touch.view isDescendantOfView:_liveChatView]
        ||[touch.view isDescendantOfView:_userListView]
        ||[touch.view isDescendantOfView:_hostInfoView]
        ||[touch.view isDescendantOfView:_chatTool]
        ||[touch.view isDescendantOfView:_roomGameCycle]) {
        return NO;
    }
    return YES;
}
- (RKShowPaintedView *)paintedShowRegion {
    if (!_paintedShowRegion) {
        _paintedShowRegion = [[RKShowPaintedView alloc]init];
        //_paintedShowRegion.backgroundColor = UIColor.redColor;
    }
    return _paintedShowRegion;
}
-(void)desTroyDaytaskView {
    if (_dayTaskView) {
        [_dayTaskView dismissView];
        _dayTaskView = nil;
    }
}
@end
